Unite2019Tokyoログ


概要

かなり満足感のある公演がいっぱい聞けた。が、めちゃくちゃ抜粋だけ。



The Heretic

VFXGraphで、キャラクターの周りに球体の判定を作り、その判定に対してホコリが避けるようなのを作る

すごいな、こんなことまでできるんだ。


符号付きディスタンスフィルタ(SignedDistanceFilter)

エッジに近づくほど黒くなる的なマスクに使っていた。TextMeshProでおなじみ。


ワープ

異常な量のスライダーがあって面白かった。

基本的な考え方としては、なんらかの単位で映像をスライス、ずらしたり歪めたりしていた。


たのしいDOTS

いますぐはじめなくてもいい DOTS。プレビュー版。


メモリ -> 土地、面積。出来るだけ効率よく使いたい。

中央管理者の関与なしに場所から別の場所(=アドレス)を指せるので、コントロールが厳しくなる。

みたいな歴史があって~。


そこで、NativeContainerという概念を使って、unmanagedな領域で頑張る。

C#の仕様上で、structはmanaged領域に入らないのを利用した構成。


チャンクの話

chunk = GameObject、というか「インスタンス」。


昨今の端末はメモリ的に富豪なので、managedな領域で頑張らなくても、unmanagedな領域で富豪的にやってみてもいいのでは?

ということで、


チャンクは16KB単位。これは固定で、「この単位で管理する」というだけの決まり。

一つ要素を消すには、

・穴を開ける

・穴に対していままで他のところにあったデータをコピーする

(このとき管理系も書き換える)

とかで、たったの2ステップで完了する。



UnityPhysicsの話

決定性がある(マルチスレッドでなおかつ状態を持たないのでマジで単なる式として動く)

シミュレーションループ独立



予測系が実装できる(ゴルフの玉がどう飛ぶかとか)


・ABとかはどうなるの?

-> ECSへとダイレクトロードできるようになるはず(システムの組み合わせとかは前提になる)


Rig Constraints

・packageに上がってる(preview)

・実行時にいろいろできそうなやつ。サンプルが入ってるので触ってみよう。


モーションなどのブレンドができる。



感想

1日目は基調講演とかみれた感じ。


感想というか気になった点は、

・ECSはまだこれからもっと書きやすくなる by 安原さん


という感じで、

エンティティとかシステムを使ってまるーーっと書き方が変わるところとどう使い方が変わるか、待とうね!!! というのが総論。


Day2 

SRPの話

SRPってなーに? Unityの描画フローについて自作できる機構。


投影テクスチャシャドウが使いたい!

Unityのシャドウマップは必ずデプスバッファになる。

-> デプスバッファを使わずにR8程度でシャドウマップを持ちたいが、変更はできない。カメラとかで描画を自作して自分で、、、しんどい。

-> なので、SRPで、、、



RenderTextureとカメラ管理

prefabをつくってー、RenderTexture関連のスクリプトを置いてー、、

-> Playしないと絵が出ない、各要素にスクリプトが必要、生成順の問題が、、、

-> なので、SRPで、、(これはまあ意図が影響してるが


作り方

Protected override void Render(…)みたいな関数を書くと上書きされる。

サンプルは近日公開。


書き方: LWRPを参考にしよう! 中身を見る以外に特に例はないぞ。マジか。

これスペックどうなるんだろう、まー変わんないのか。


いいところ

・単一のカメラで縮小したRenderTextureをdepthありで生成したり、それらの描画をマージしたりができる


Unityの描画機能をimportするには?

reflection probeを実現するための関数があった。

PostProcessingStackを使いたい -> PostProcessingRenderContextというのがコードから利用できたので、それでコンテキストを作成して、、


UnityのデフォルトUIはそのまま描画したい -> UIにはライトがない。DefaultUnlitというのを設定するとできた。


-> 困ったらすべてLWRPの該当の箇所を見てる。



結論

パイプライン外部でカメラ + RenderTexture自作ではなくカメラ一発で済むの最高!



セガのHTTP/2の話

HTTP/2ライブラリの実装について

・C/C++は避けたい、、

・HTTP/2のC#実装を探した

・monoとか色々あるけど結局C#で複数をサポートしているのがなかった

・C#を断念

・もうC/C++しか、、

などの感じで、最終的にlibcurlをラップして使う形になっていると。

これはWindowsエディタで動作するいい感じのライブラリがなかったため。

Windowsエディタが要らない + iOS/Androidならそれぞれのネイティブがいいのでは?ということを言っていた。


HTTP/2あるあるなんだけど、切断検知やタイムアウトについて、

・libcurlのコネクションそのものに対するタイムアウト+R/Wに関するタイムアウト

・これだけだと足りなくて結局C#側でもタイムアウト検知してる


などがあるとのこと。



禍つヴァールハイト」最大100人同時プレイ!モバイルオンラインゲームの実装テクニック

次のようなリソース管理を行っているぽい。

・ABをビルド

・すべてのABをtarファイルで連結、どの部分にどのABが入っているかなどのリストを作成(tarのインデックス集)

・tarとリストをCDNに置く

・クライアントはリストを取得、クライアント内のキャッシュと比較して、ABが必要になったらCDNから取得する

・CDNへのリクエストとしてrange指定を行い、tarファイルから特定の範囲を取得する

(複数のABの取得が1リクエストでできるというおもしろ効果がここで発生する

・クライアントはレスポンスを事前に取得していたリスト情報をもとにN個のABに分割、ローカルフォルダに保存

という感じで、

なるべく少ないリクエストで複数のデータを取得する、というのを実現している。すごい。



Untiy ロードマップ

LiveLink

ビルド済みアプリに対してエディタからデータを送り込む、今後はコードも(ホットリロードかな!??!

開発中だけでもiOSで使えると嬉しいな。



テクスチャストリーミング

テクスチャを非同期でロードする技術。

特にVRとかで、至近距離なら高精細なテクスチャ、遠くなら荒いやつ~とかで大活躍しそう。

今後が楽しみ。


Cloud Content Delivery

Unityが手配してくれるCDN的なもの。

まだいろいろ未定とのことなんで、Akamaiさんとかと組んでくれると嬉しいなあ。